#include "ImageAlgorithmButton.h"
#include <QPixmap>
#include <QButtonGroup>

// 不再使用静态按钮组，改为每个ImageProcessingWidget管理自己的按钮组
ImageAlgorithmButton::ImageAlgorithmButton(QWidget *parent)
    : QPushButton(parent)
    , ui(new Ui::ImageAlgorithmButton)
    , m_hasSettingsWidget(true)
    , m_isProcessed(false)
{
    ui->setupUi(this);
    // 设置为可选中的按钮样式
    setCheckable(true);
    // 只保留状态切换信号的处理
    connect(this, &QPushButton::toggled, this, &ImageAlgorithmButton::onToggled);
}
ImageAlgorithmButton::~ImageAlgorithmButton()
{
    delete ui;
}

void ImageAlgorithmButton::setText(const QString &text)
{
    ui->m_textLabel->setText(text);
}

void ImageAlgorithmButton::setIcon(const QString &iconPath)
{
    QPixmap pixmap(iconPath);
    if (!pixmap.isNull()) {
        ui->m_iconLabel->setPixmap(pixmap.scaled(16, 16, 
                                             Qt::KeepAspectRatio, 
                                             Qt::SmoothTransformation));
    }
}

void ImageAlgorithmButton::enterEvent(QEvent *event)
{
    // 由UI文件中的样式表处理悬停效果
    QPushButton::enterEvent(event);
}

void ImageAlgorithmButton::leaveEvent(QEvent *event)
{
    // 由UI文件中的样式表处理离开效果
    QPushButton::leaveEvent(event);
}


// 状态切换处理函数
void ImageAlgorithmButton::onToggled(bool checked)
{
    updateArrow(checked);
    emit toggled(checked);
}

void ImageAlgorithmButton::setProcessed(bool processed)
{
    if (m_isProcessed != processed) {
        m_isProcessed = processed;
         ui->m_processedLabel->setProperty("processed",processed);
        // 通知样式系统属性变化
        ui->m_processedLabel->setStyle(ui->m_processedLabel->style());
    }
}

void ImageAlgorithmButton::setHasSettingsWidget(bool hasWidget)
{
    if (m_hasSettingsWidget != hasWidget) {
        m_hasSettingsWidget = hasWidget;
        
        // 根据是否有设置widget决定是否显示箭头
        ui->m_arrowLabel->setVisible(hasWidget);
        
        emit hasSettingsWidgetChanged(hasWidget);
    }
}

void ImageAlgorithmButton::updateArrow(bool checked)
{
     ui->m_arrowLabel->setProperty("IsChecked",checked);
    // 通知样式系统属性变化
    ui->m_arrowLabel->setStyle(ui->m_arrowLabel->style());
    setStyle(style());
}

